15分で始めるGremlinによるカオス実験 #reinvent
こんにちは。AWS事業本部のKyoです。
re:Invent2019で出会ったカオスエンジニアリングツール、Gremlin。これのチュートリアルページを元に簡単なカオス実験を行ってみたいと思います。
How to Use and Install Gremlin on Amazon Linux
前提
- AWSアカウント
- Gremlinアカウント
Team IDとSecret Keyの確認
Gremlinアプリにログインし、ダッシュボード右上のHalt All Attack
の右のアイコンをクリックし、Company Settings
を開きます。そこからTeam
、Cofiguration
と選択し、Team ID
とSecret Key
をメモします。
Secret Key
はチームに1つで、生成時以外は確認できないので、ご注意ください(リセットは可能)。
実験内容
EC2インスタンスにCPUアタックを実施し、CPU利用率の変化を確認する。
やってみる
EC2インスタンスの起動
OSはAmazon Linux2を選択します。若干セットアップの方法は異なるようですが、UbuntuやCentOSなどにも対応しているようです。
インスタンスタイプはt2.microを選択しました。
セキュリティグループ関してはSSH用の22番ポートの解放だけで十分なようでした。
エージェント等のインストール
対象のインスタンスにSSHで接続し、エージェント等をインストールします。
SSH接続
$ ssh -i <your key> ec2-user@<public ip>
iproute-tcのインストール
$ sudo yum install -y iproute-tc
レポジトリの追加
$ sudo curl https://rpm.gremlin.com/gremlin.repo -o /etc/yum.repos.d/gremlin.repo
GremlinデーモンとCLIをインストール
$ sudo yum install -y gremlin gremlind
Gremlinの初期化
Team ID
とSecret Key
を聞かれますので、入力してください。
$ sudo gremlin init
Gremlinアプリとの紐付け確認
ここまでの作業に問題がなければダッシュボードから対象のインスタンスが見えているはずです。
Gremlinによる障害の注入
CPU利用率の事前確認
実験を始める前に、現在のCPU利用率を確認します。
$ top
こんな感じでした。
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1 root 20 0 43592 5344 4012 S 0.0 0.5 0:02.23 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd 4 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/0:0H 6 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 mm_percpu_wq 7 root 20 0 0 0 0 S 0.0 0.0 0:00.08 ksoftirqd/0 8 root 20 0 0 0 0 I 0.0 0.0 0:00.38 rcu_sched 9 root 20 0 0 0 0 I 0.0 0.0 0:00.00 rcu_bh 10 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/0 11 root rt 0 0 0 0 S 0.0 0.0 0:00.14 watchdog/0 12 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/0 14 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kdevtmpfs 15 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 netns 16 root 20 0 0 0 0 I 0.0 0.0 0:00.20 kworker/u30+ 21 root 20 0 0 0 0 S 0.0 0.0 0:00.00 xenbus 22 root 20 0 0 0 0 S 0.0 0.0 0:00.01 xenwatch 172 root 20 0 0 0 0 S 0.0 0.0 0:00.01 khungtaskd 173 root 20 0 0 0 0 S 0.0 0.0 0:00.00 oom_reaper 174 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 writeback
Gremlinアプリ操作
Attacks、Infrastructureから、New Attackを選択します。
Choose Hosts to targetからExtractを選択し、チェックボックスで対象のインスタンスを選択します。
その後、Choose a Gremlinで、Resource、CPUを選択します。
画面下のUnleash Gremlin
ボタンでいよいよ実行です!
なお、Unleash
とは「解き放つ」という意味で、グレムリンを解き放って悪さをさせるイメージのようですね。
CPU利用率の確認
top
コマンドで確認するとgremlinがCPUを占有していることが確認できます。
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 6287 gremlin 20 0 22260 8664 7128 S 99.7 0.9 0:06.31 gremlin 1 root 20 0 43592 5344 4012 S 0.0 0.5 0:02.23 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd 4 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/0:0H 6 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 mm_percpu_wq 7 root 20 0 0 0 0 S 0.0 0.0 0:00.08 ksoftirqd/0 8 root 20 0 0 0 0 I 0.0 0.0 0:00.38 rcu_sched 9 root 20 0 0 0 0 I 0.0 0.0 0:00.00 rcu_bh 10 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/0 11 root rt 0 0 0 0 S 0.0 0.0 0:00.14 watchdog/0 12 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/0 14 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kdevtmpfs 15 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 netns 16 root 20 0 0 0 0 I 0.0 0.0 0:00.21 kworker/u30+ 21 root 20 0 0 0 0 S 0.0 0.0 0:00.00 xenbus 22 root 20 0 0 0 0 S 0.0 0.0 0:00.01 xenwatch 172 root 20 0 0 0 0 S 0.0 0.0 0:00.01 khungtaskd 173 root 20 0 0 0 0 S 0.0 0.0 0:00.00 oom_reaper
なお、今回ではlengthがデフォルトの60秒なので、60秒後には元に戻ります。また、ダッシュボード右上の赤いボタンHalt All Attack
から強制停止を行うことも可能です。
おわりに
まずは基本のき、という事でEC2インスタンスにCPU障害を注入してみました。作業もエージェントのインストールだけで、非常にシンプルでした。
同じ要領で、Process killerやBlackhole等も簡単に試せるので、これを期にカオスエンジニアリングに入門してみてはいかがでしょうか?
以上、何かのお役に立てれば幸いです。